package com.isd.inventario.web;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


import com.isd.facturacion.web.CarritoBean;
import com.isd.global.rn.MonedaRN;
import com.isd.global.util.JsfUtil;
import com.isd.global.web.MonedaBean;
import com.isd.inventario.modelo.ItemCatalogoDataSource;
import com.isd.inventario.rn.ListaPrecioRN;
import com.isd.inventario.vista.ItemCatalogo;
import com.isd.seguridad.web.UsuarioSessionBean;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;


/**
 *
 * @author Claudio
 */
@ManagedBean(name="exportadorBean")
@SessionScoped
public class ExportadorBean implements Serializable {
    
    @EJB private ListaPrecioRN listaPrecioRN;    
    @EJB private MonedaRN monedaRN;    
        
    private String moneda;
    private String variacionPrecio;
    private String datosSeleccionados;
    private String tipoArchivo;
    
    @ManagedProperty(value = "#{carritoBean}")
    private CarritoBean carritoBean;
    
    @ManagedProperty(value = "#{catalogoBean}")
    private CatalogoBean catalogoBean;
    
    @ManagedProperty(value = "#{monedaBean}")
    private MonedaBean monedaBean;

    @ManagedProperty(value = "#{usuarioSessionBean}")
    private UsuarioSessionBean usuarioSessionBean;


    /** Creates a new instance of CatalogoBean */
    public ExportadorBean() {
        
    }

    @PostConstruct
    public void init(){
        
        moneda = "ARS";
        datosSeleccionados = "A";
        tipoArchivo = "E";   
        variacionPrecio = "A";
    } 
    
    public void descargar(){
        
        if(usuarioSessionBean.getUsuario().getCliente()==null){
            JsfUtil.addWarningMessage("Por favor seleccione un cliente para descargar un catálogo");
            return;                    
        } 

        if (catalogoBean.getCatalogo().isEmpty()){
          JsfUtil.addErrorMessage("No hay datos en el catálogo para generar archivo");
          return;
        }
        
        List<ItemCatalogo> catalogoAux;
        /*catalogoAux = null;*/
        
        if(datosSeleccionados.equals("A")){            
            catalogoAux = listaPrecioRN.getItemCatalogo(-1,-1,null,null, catalogoBean.getFiltro());            
        }else{
            
            Map<String,String> filtroC = new HashMap<String,String>();
            filtroC.put("nrocta = ", "'"+usuarioSessionBean.getUsuario().getCliente().getNrocta()+"'");
            filtroC.put("diponibleEnInternet = ", "'S'");            
            catalogoAux = listaPrecioRN.getItemCatalogo(-1,100000,null,null, filtroC);            
        }
                
        if (tipoArchivo.equals("E")){        
            generarCatalogoExcel(catalogoAux);            
        }else{            
            imprimirPDF(catalogoAux);
        }        
    }
    
    private void prepararPrecios(List<ItemCatalogo> catalogo){
 
        if(catalogo==null) return;   
        
        BigDecimal cotizacionMonedaSeleccionada =  monedaRN.getCotizacionDia(moneda).setScale(2,RoundingMode.HALF_UP);
        
        for (ItemCatalogo itm: catalogo){
            
            if(itm.getPrecioFinal().compareTo(BigDecimal.ZERO)== 1){

                BigDecimal pv = null;
                BigDecimal pm = null;

                //Precio de venta
                pv = itm.getPrecioFinal().setScale(2,RoundingMode.HALF_UP);

                try {

                    if (catalogoBean.getPorcMarcacion() != null) {
                        pm = pv.add(pv.multiply(catalogoBean.getPorcMarcacion().divide(new BigDecimal(100),2,RoundingMode.HALF_UP)));
                    } else {
                        pm = pv.setScale(2,RoundingMode.HALF_UP);;
                    }
                } catch (Exception e) {

                    pm = BigDecimal.ZERO;
                }
                
                if(itm.getMoneda().equals("USD")){
                    
                    pv = pv.multiply(monedaBean.getCotizacionDelDia().getCotizacion()).divide(cotizacionMonedaSeleccionada,2,RoundingMode.HALF_UP);
                    pm = pm.multiply(monedaBean.getCotizacionDelDia().getCotizacion()).divide(cotizacionMonedaSeleccionada,2,RoundingMode.HALF_UP);
                    
                }else{
                    
                    pv = pv.divide(cotizacionMonedaSeleccionada,2,RoundingMode.HALF_UP);
                    pm = pm.divide(cotizacionMonedaSeleccionada,2,RoundingMode.HALF_UP);
                } 
                
                itm.setPrecioFinal(pv);
                itm.setPrecioMarcado(pm);
            }
        }
    }
   
    private void imprimirPDF(List<ItemCatalogo> catalogoPDF){
        try {

            if (catalogoPDF.isEmpty()){
              JsfUtil.addErrorMessage("No hay datos en el catálogo para generar archivo");
              return;
            }
            
            prepararPrecios(catalogoPDF);

            Map parameters = new HashMap();
            parameters.put("PORCENTAJE_MARCACION", catalogoBean.getPorcMarcacion());
            parameters.put("COTIZACION", monedaRN.getCotizacionDia("USD"));
            parameters.put("MONEDA_SELECCIONADA", moneda);

            String nombreArchivo = "catalogo_" + (new SimpleDateFormat("dd/MM/yyyy")).format(new Date());
            
            JasperPrint print = JasperFillManager.fillReport(FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reportes/catalogoProducto.jasper"),parameters,new ItemCatalogoDataSource(catalogoPDF));
            
            byte[] bytes = JasperExportManager.exportReportToPdf(print);

            FacesContext context = FacesContext.getCurrentInstance();
            HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();

            response.addHeader("Content-disposition","attachment;filename="+nombreArchivo+".pdf");
            response.setContentLength(bytes.length);
            response.getOutputStream().write(bytes);
            response.setContentType("application/pdf");
            context.responseComplete();

        } catch (Exception e){
            e.printStackTrace();
            JsfUtil.addErrorMessage("Error: Exception " + e.getClass().getSimpleName());
        }

    }
    
    public void generarCatalogoExcel(List<ItemCatalogo> catalogoExcel){
        
        //Creamos el libro
        Workbook wb = new HSSFWorkbook();
        //Creamos la hoja
        Sheet s = wb.createSheet("Precios Intercap");

        Row  fila;
        Cell celda;

        Map<String, CellStyle> styles = createStyles(wb);


        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        int i =0;

        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$D$"+(i+1)+""));
        crearCelda(s, i, 1, "CATALOGO PERTENECIENTE A " + usuarioSessionBean.getUsuario().getCliente().getNombre(), styles.get("titulo"));

        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$D$"+(i+1)+""));
        crearCelda(s, i, 1, "Fecha creación: " + sdf.format(new Date()),styles.get("texto"));
        
        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$K$"+(i+1)+""));
        crearCelda(s, i, 1, "Cotización actual dolar: " + monedaRN.getCotizacionDia("USD"), styles.get("texto"));

        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$K$"+(i+1)+""));
        if(catalogoBean.getPorcMarcacion()==null) catalogoBean.setPorcMarcacion(BigDecimal.ZERO);
        crearCelda(s, i, 1, "Porcentaje marcación: " + catalogoBean.getPorcMarcacion() +" %", styles.get("texto"));
        
        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$N$"+(i+1)+""));
        crearCelda(s, i, 1, "* Las variaciones de precios informadas corresponden a los últimos 30 días *", styles.get("informacion_alerta"));
        
        i++;
        i++;
        fila = s.createRow(i);

        celda = fila.createCell(1);
        celda.setCellValue("Código");  celda.setCellStyle(styles.get("title_table"));
        celda = fila.createCell(2);
        celda.setCellValue("Nro Parte");  celda.setCellStyle(styles.get("title_table"));
        celda = fila.createCell(3);
        celda.setCellValue("Descripción");  celda.setCellStyle(styles.get("title_table"));
        celda = fila.createCell(4);
        celda.setCellValue("Tipo");  celda.setCellStyle(styles.get("title_table"));
        celda = fila.createCell(5);
        celda.setCellValue("Subtipo");  celda.setCellStyle(styles.get("title_table"));
        celda = fila.createCell(6);
        celda.setCellValue("Marca");  celda.setCellStyle(styles.get("title_table"));
        celda = fila.createCell(7);
        celda.setCellValue("Presentación");  celda.setCellStyle(styles.get("title_table"));
        celda = fila.createCell(8);
        celda.setCellValue("Disponible");  celda.setCellStyle(styles.get("title_table"));
        celda = fila.createCell(9);
        celda.setCellValue("Origen");  celda.setCellStyle(styles.get("title_table"));        
        celda = fila.createCell(10);
        celda.setCellValue("Moneda");  celda.setCellStyle(styles.get("title_table"));                
        celda = fila.createCell(11);
        celda.setCellValue("Variación de precio");  celda.setCellStyle(styles.get("title_table"));
        celda = fila.createCell(12);
        celda.setCellValue("$ Unit. c/I.V.A.");  celda.setCellStyle(styles.get("title_table"));
        celda = fila.createCell(13);
        celda.setCellValue("$ Marcado c/I.V.A");  celda.setCellStyle(styles.get("title_table"));
        

        i++;
        
        prepararPrecios(catalogoExcel);
        
        
        for (ItemCatalogo itm: catalogoExcel){

            if(itm.getPrecioFinal().compareTo(BigDecimal.ZERO)== 1){

                fila = s.createRow(i);                                                   
                
                celda = fila.createCell(1);
                celda.setCellValue(itm.getCodigo());
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_texto_v":"data_table_texto"));                
                
                celda = fila.createCell(2);
                celda.setCellValue((itm.getNroParte()==null?"":itm.getNroParte()));
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_texto_v":"data_table_texto"));                

                celda = fila.createCell(3);
                celda.setCellValue(itm.getDescrp());
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_texto_v":"data_table_texto"));                

                celda = fila.createCell(4);
                celda.setCellValue(itm.getTipoProducto());
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_texto_v":"data_table_texto"));                

                celda = fila.createCell(5);
                celda.setCellValue(itm.getSubtipo());
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_texto_v":"data_table_texto"));                

                celda = fila.createCell(6);
                celda.setCellValue(itm.getMarca());
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_texto_v":"data_table_texto"));                

                celda = fila.createCell(7);
                celda.setCellValue(itm.getUnidadMedida());
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_texto_v":"data_table_texto"));                

                String disponible = "";

                if(itm.getNoa()!=null){
                    if (itm.getNoa().compareTo(BigDecimal.ZERO)==1){
                        disponible += " NOA";
                    }
                }

                if(itm.getNea()!=null){
                    if (itm.getNea().compareTo(BigDecimal.ZERO)==1){
                        disponible += " NEA";
                    }
                }

                if(itm.getBue()!=null){
                    if (itm.getBue().compareTo(BigDecimal.ZERO)==1){
                        disponible += " BUE";
                    }
                }

                if(itm.getCuy()!=null){
                    if (itm.getCuy().compareTo(BigDecimal.ZERO)==1){
                        disponible += " CUY";
                    }
                }

                if(disponible.isEmpty()){
                    if(itm.getProximoIngreso()!=null){
                        disponible += "Prox. Ing. " + new SimpleDateFormat("dd/MM/yyyy").format(itm.getProximoIngreso());
                    }
                }

                celda = fila.createCell(8);
                celda.setCellValue(disponible);
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_texto_v":"data_table_texto"));                

                celda = fila.createCell(9);
                celda.setCellValue((itm.getImportado().equals('N')?"Nac":"Imp"));
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_texto_v":"data_table_texto"));                
                               

                celda = fila.createCell(10);
                celda.setCellValue(moneda);
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_texto_v":"data_table_texto"));                

                celda = fila.createCell(11);
                celda.setCellValue(itm.getConVariacionPrecio().equals("S")?"Si":"No");
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_texto_v":"data_table_texto"));                
                
                celda = fila.createCell(12);
                celda.setCellValue(itm.getPrecioFinal().toString());
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_precio_v":"data_table_precio"));

                celda = fila.createCell(13);
                celda.setCellValue(itm.getPrecioMarcado().toString());
                celda.setCellStyle(styles.get(itm.getConVariacionPrecio().equals("S")?"data_table_precio_v":"data_table_precio"));
                

                i++;
            }
        }

        i++;
        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$N$"+(i+1)+""));
        crearCelda(s, i, 1, "Las existencias informadas son de caracter orientativo.", styles.get("informacion"));

        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$N$"+(i+1)+""));
        crearCelda(s, i, 1, "A fin de corroborar los datos brindados, ", styles.get("informacion"));

        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$N$"+(i+1)+""));
        crearCelda(s, i, 1, "sirvase confirmarlos en nuestras oficinas, via e-mail o telefonicamente", styles.get("informacion"));

        i++;
        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$N$"+(i+1)+""));
        crearCelda(s, i, 1, "Los datos de la columna Presentacion son de caracter informativo", styles.get("informacion"));

        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$N$"+(i+1)+""));
        crearCelda(s, i, 1, "Es preciso tener en cuenta que algunas provincias tienen", styles.get("informacion"));

        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$N$"+(i+1)+""));
        crearCelda(s, i, 1, "instrumentados regímenes de percepciones que podrían incrementar", styles.get("informacion"));

        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+i+":$N$"+i+""));

        i++;
        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$N$"+(i+1)+""));
        crearCelda(s, i, 1, "el valor en función de las alícuotas que resulten de aplicación", styles.get("informacion"));
        
        i++;
        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$N$"+(i+1)+""));
        crearCelda(s, i, 1, "* Las variaciones de precios informadas corresponden a los últimos 30 días *", styles.get("informacion_alerta"));

        i++;
        i++;
        s.addMergedRegion( CellRangeAddress.valueOf("$B$"+(i+1)+":$N$"+(i+1)+""));
        crearCelda(s, i, 1, "INTERCAP S.R.L.", styles.get("titulo"));

        s.setColumnWidth(0, 256*1);
        s.setColumnWidth(1, 256*10);
        s.setColumnWidth(2, 256*10);
        s.setColumnWidth(3, 256*60);
        s.setColumnWidth(4, 256*12);
        s.setColumnWidth(5, 256*20);
        s.setColumnWidth(6, 256*17);
        s.setColumnWidth(7, 256*17);
        s.setColumnWidth(8, 256*20);
        s.setColumnWidth(9, 256*17);
        s.setColumnWidth(10, 256*17);
        s.setColumnWidth(11,256*17);
        

        // Write the output to a file
        try {
            
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            wb.write(byteArrayOutputStream);

            
            FacesContext context = FacesContext.getCurrentInstance();
            HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();            
            response.addHeader("Content-Disposition", "attachment; filename=\"Catalogo_intercap.xls\"");
            //response.setHeader("Content-Disposition", "inline; filename=\"Catalogo_intercap.xls\"");
            response.setContentLength(byteArrayOutputStream.toByteArray().length);
            response.getOutputStream().write(byteArrayOutputStream.toByteArray());
            response.setContentType("application/vnd.ms-excel");
//            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            context.responseComplete();



            /**
            String contentType = "application/vnd.ms-excel.12"; //"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            InputStream stream =  ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream(byteArrayOutputStream);
            descargaCatalogo = new DefaultStreamedContent(stream, contentType, "Catalogo_intercap.xls");
            */
            

        } catch (IOException iOException) {

        }
    }

    private void crearCelda(Sheet s, int nroFila, int columna, Object valor, CellStyle style ){

        Row  fila;
        Cell celda;

        fila = s.createRow(nroFila);
        celda = fila.createCell(columna);
        celda.setCellValue( (String) valor);
        celda.setCellStyle(style);

    }

    private Map<String, CellStyle> createStyles(Workbook wb){

        Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
//        HSSFPalette paleta = wb.getCustomPalette();

        CellStyle style;
        Font titleFont = wb.createFont();
        DataFormat df = wb.createDataFormat();

        titleFont.setFontHeightInPoints((short)14);
        titleFont.setFontName("Trebuchet MS");
        style = wb.createCellStyle();
        style.setFont(titleFont);

        styles.put("titulo", style);

        Font fTexto = wb.createFont();
        fTexto.setFontHeightInPoints((short)12);
        fTexto.setFontName("Trebuchet MS");
        style = wb.createCellStyle();
        style.setFont(fTexto);
        styles.put("texto", style);
        
        Font fNumber = wb.createFont();
        fNumber.setFontHeightInPoints((short)12);
        fNumber.setFontName("Trebuchet MS");
        style = wb.createCellStyle();
        style.setFont(fTexto);
        style.setDataFormat(df.getFormat("#,##0.00"));
        styles.put("numero", style);


        Font fInfor = wb.createFont();
        fInfor.setFontHeightInPoints((short)10);
        fInfor.setFontName("Trebuchet MS");
        style = wb.createCellStyle();
        style.setFont(fInfor);
        style.setAlignment(CellStyle.ALIGN_CENTER);
        styles.put("informacion", style);
        
        
        Font fInforA = wb.createFont();
        fInfor.setFontHeightInPoints((short)10);
        fInfor.setFontName("Trebuchet MS");
        style = wb.createCellStyle();
        style.setFont(fInforA);
        style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
        style.setAlignment(CellStyle.ALIGN_LEFT);
        styles.put("informacion_alerta", style);

        Font htFont = wb.createFont();
        htFont.setFontHeightInPoints((short)12);
        htFont.setColor(IndexedColors.DARK_BLUE.getIndex());
        htFont.setFontName("Trebuchet MS");
        
        style = wb.createCellStyle();
        style.setAlignment(CellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
        style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
        style.setFont(htFont);
        styles.put("header_table", style);

        Font ttFont = wb.createFont();
        ttFont.setFontHeightInPoints((short)10);
        ttFont.setColor(IndexedColors.LIGHT_BLUE.getIndex());
        ttFont.setFontName("Trebuchet MS");
        style = wb.createCellStyle();
        style.setAlignment(CellStyle.ALIGN_CENTER);
        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
        style.setFont(ttFont);
        styles.put("title_table", style);

        
        //--------------------------------------------------------------------
        
        Font itemFont = wb.createFont();
        itemFont.setFontHeightInPoints((short)9);
        itemFont.setFontName("Trebuchet MS");
        style = wb.createCellStyle();
        style.setAlignment(CellStyle.ALIGN_LEFT);
        style.setFont(itemFont);
        style.setBorderTop(CellStyle.BORDER_THIN);
        style.setBorderBottom(CellStyle.BORDER_THIN);
        style.setBorderLeft(CellStyle.BORDER_THIN);
        style.setBorderRight(CellStyle.BORDER_THIN);
        style.setTopBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setBottomBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setRightBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setLeftBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setDataFormat(wb.createDataFormat().getFormat("text"));
        styles.put("data_table_texto", style);
        
        
        //--------------------------------------------------------------------        
        style = wb.createCellStyle();
        style.setAlignment(CellStyle.ALIGN_LEFT);
        style.setFont(itemFont);
        style.setBorderTop(CellStyle.BORDER_THIN);
        style.setBorderBottom(CellStyle.BORDER_THIN);
        style.setBorderLeft(CellStyle.BORDER_THIN);
        style.setBorderRight(CellStyle.BORDER_THIN);
        style.setTopBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setBottomBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setRightBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setLeftBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());                
        style.setFillForegroundColor(IndexedColors.LEMON_CHIFFON.getIndex());
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
        style.setDataFormat(wb.createDataFormat().getFormat("text"));
        styles.put("data_table_texto_v", style);

        
        //--------------------------------------------------------------------
        style = wb.createCellStyle();
        style.setAlignment(CellStyle.ALIGN_RIGHT);
        style.setFont(itemFont);
        style.setBorderTop(CellStyle.BORDER_THIN);
        style.setBorderBottom(CellStyle.BORDER_THIN);
        style.setBorderLeft(CellStyle.BORDER_THIN);
        style.setBorderRight(CellStyle.BORDER_THIN);

        style.setTopBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setBottomBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setRightBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setLeftBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());

        style.setDataFormat(wb.createDataFormat().getFormat("$ ###,##0.00"));
        styles.put("data_table_precio", style);
        
        
        //--------------------------------------------------------------------
        style = wb.createCellStyle();
        style.setAlignment(CellStyle.ALIGN_RIGHT);
        style.setFont(itemFont);
        style.setBorderTop(CellStyle.BORDER_THIN);
        style.setBorderBottom(CellStyle.BORDER_THIN);
        style.setBorderLeft(CellStyle.BORDER_THIN);
        style.setBorderRight(CellStyle.BORDER_THIN);

        style.setTopBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setBottomBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setRightBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setLeftBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
        
        style.setFillForegroundColor(IndexedColors.LEMON_CHIFFON.getIndex());
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);

        style.setDataFormat(wb.createDataFormat().getFormat("$ ###,##0.00"));
        styles.put("data_table_precio_v", style);

        return styles;
    }
   

     //_-------------------------------------------------------------------------

    public CarritoBean getCarritoBean() {
        return carritoBean;
    }

    public void setCarritoBean(CarritoBean carritoBean) {
        this.carritoBean = carritoBean;
    }

    public UsuarioSessionBean getUsuarioSessionBean() {
        return usuarioSessionBean;
    }

    public void setUsuarioSessionBean(UsuarioSessionBean usuarioSessionBean) {
        this.usuarioSessionBean = usuarioSessionBean;
    }

    public MonedaBean getMonedaBean() {
        return monedaBean;
    }

    public void setMonedaBean(MonedaBean monedaBean) {
        this.monedaBean = monedaBean;
    }

    public String getMoneda() {
        return moneda;
    }

    public void setMoneda(String moneda) {
        this.moneda = moneda;
    }

    public String getDatosSeleccionados() {
        return datosSeleccionados;
    }

    public void setDatosSeleccionados(String datosSeleccionados) {
        this.datosSeleccionados = datosSeleccionados;
    }

    public String getTipoArchivo() {
        return tipoArchivo;
    }

    public void setTipoArchivo(String tipoArchivo) {
        this.tipoArchivo = tipoArchivo;
    }

    public CatalogoBean getCatalogoBean() {
        return catalogoBean;
    }

    public void setCatalogoBean(CatalogoBean catalogoBean) {
        this.catalogoBean = catalogoBean;
    }

    public String getVariacionPrecio() {
        return variacionPrecio;
    }

    public void setVariacionPrecio(String variacionPrecio) {
        this.variacionPrecio = variacionPrecio;
    }
    
    
    
}
